package com.akjava.gwt.html5test.client;
import com.akjava.gwt.html5.client.file.Uint8Array;
import com.akjava.gwt.html5.client.media.AudioContext.DecodeAudioListener;
import com.akjava.gwt.html5.client.media.AudioContext.DecodeErrorListener;
import com.akjava.gwt.html5.client.media.AudioProcessingEvent;
import com.akjava.gwt.html5.client.media.OfflineAudioContext;
import com.akjava.gwt.html5.client.media.OfflineAudioContext.CompleteListener;
import com.akjava.gwt.html5.client.media.ScriptProcessorNode;
import com.akjava.gwt.html5.client.media.ScriptProcessorNode.AudioProcessingEventListener;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.typedarrays.shared.ArrayBuffer;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.xhr.client.ReadyStateChangeHandler;
import com.google.gwt.xhr.client.XMLHttpRequest;
import com.google.gwt.xhr.client.XMLHttpRequest.ResponseType;
/**
*
* TODO after chrome34 there are ScriptProcessorNode has bugs
* @author aki
*
*/
public class MediaTest extends VerticalPanel{
int index=0;
public MediaTest(){
super();
add(new Label("offline"));
loadWav("test.wav",new LoadWavListener() {
@Override
public void onLoad(ArrayBuffer buffer) {
OfflineAudioContext context=OfflineAudioContext.create(1,100,48000);
final ScriptProcessorNode processor=context.createScriptProcessor(100, 1, 1);
processor.connect(context.getDestination());
index=0;
context.setOnComplete(new CompleteListener() {
@Override
public void onComplete() {
HTML5Test.log("index:"+index);
}
});
processor.setOnAudioprocess(new AudioProcessingEventListener() {
@Override
public void onAudioProcess(AudioProcessingEvent event) {
if(index<5){
HTML5Test.log(event);
}
index++;
//HTML5Test.log(""+index);
}
});
//context.crea
context.decodeAudioData(new DecodeAudioListener() {
@Override
public void onDecode(ArrayBuffer decodeBuffer) {
HTML5Test.log(Uint8Array.createUint8(decodeBuffer));
}
}, new DecodeErrorListener(){
@Override
public void onError(JavaScriptObject error) {
HTML5Test.log(error);
}});
}
});
}
public static interface LoadWavListener{
public void onLoad(ArrayBuffer buffer);
}
private void loadWav(String path,final LoadWavListener listener) {
XMLHttpRequest request=XMLHttpRequest.create();
request.setResponseType(ResponseType.ArrayBuffer);
request.setOnReadyStateChange(new ReadyStateChangeHandler() {
@Override
public void onReadyStateChange(XMLHttpRequest xhr) {
if(xhr.getResponseArrayBuffer()==null){//pre loading
return;
}
ArrayBuffer arrayBufer=xhr.getResponseArrayBuffer();
listener.onLoad(arrayBufer);
}
});
request.open("GET",path);
request.send();
}
}